在軟體開發中,持續整合 (Continuous Integration, CI) 是一個非常重要的流程。透過自動化的構建與測試,開發團隊可以快速發現並解決問題,大幅提高開發效率和產品品質。今天我們將介紹如何使用 Azure DevOps Pipelines 設置 CI 流程。
持續整合 (CI) 是指開發者頻繁將程式碼提交到共享的版本庫,並透過自動化的測試和構建來快速檢查每次變更是否穩定。CI 的主要目的是減少整合時的衝突,並保證程式碼隨時可以被交付。
透過 Azure Pipelines 進行持續整合,開發團隊可以受益於以下幾個方面:
Azure Pipelines 是 Azure DevOps 的一部分,它是一個完整的 CI/CD 解決方案,支援多種程式語言和框架。通過 Azure Pipelines,我們可以:
首先,確保已在 Azure DevOps 中創建了一個專案(可以參考之前的文章 Day03 - 使用 Azure DevOps 加速交付)。進入專案後,點擊左側的 Pipelines 選項,然後點擊 Create Pipeline 來開始設置。
Azure Pipelines 支援多種版本控制系統,包括 Azure Repos、GitHub 和 Bitbucket。在本範例中,我們將使用前篇創建的 Azure Repos(Day04 - 使用 Azure DevOps Repos 進行程式碼版本控制)。選擇版本控制系統,然後選擇要建立 CI 的程式碼庫。
當連接到版本庫後,Azure Pipelines 會嘗試自動偵測專案的技術棧並建議合適的構建模板。選擇合適的模板後,可以根據需要進行自定義。
Azure Pipelines 支援使用 YAML 文件來靈活配置 CI 流程。以下範例展示了如何針對 Python 應用程式,自動化構建和測試過程,並在多個 Python 版本上進行驗證。
trigger:
- main
pool:
vmImage: ubuntu-latest
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
Python311:
python.version: '3.11'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
displayName: 'Use Python $(python.version)'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'
- script: |
pip install pytest pytest-azurepipelines
pytest
displayName: 'pytest'
1. 觸發條件 (trigger
)
這段設定告訴 Azure Pipelines,當 main
分支有變更時,自動觸發這個 CI 流程。
main
:指定當 main
分支發生變動時(如 push、pull request、merge等),觸發工作流。這確保每次有新變更提交到主要分支,CI 會自動開始執行。2. 虛擬機環境 (pool
)
Azure Pipelines 允許在多種平台上運行構建工作,這裡使用的是 Ubuntu 最新版本 作為虛擬機映像。
pool
:代表工作流程將在哪個環境上執行。Azure 提供各種預設的映像,如 ubuntu-latest
, windows-latest
, 和 macos-latest
,根據需求選擇不同的 OS。vmImage: ubuntu-latest
:這裡指定了一台最新版本的 Ubuntu 作為運行環境,用來進行構建與測試流程。3. 構建策略 (strategy
)
這部分使用了 matrix
策略,讓 Azure Pipelines 同時在多個 Python 版本上進行測試。這樣能確保應用程式在多個版本的 Python 上都能正常工作。
strategy: matrix
:Matrix 策略允許同一工作流程在多個環境或版本中執行,這裡針對 Python 的多個版本進行測試。Python38
, Python39
, Python310
, Python311
:這些代表每次 CI 執行時會針對這四個 Python 版本(3.8、3.9、3.10 和 3.11)進行測試。python.version: '3.x'
:這是設定變數,指定每個流程要使用的 Python 版本。YAML 文件的變數可以在後續的步驟中引用。4. 使用指定 Python 版本 (steps
)
在這個步驟中,我們使用 Azure Pipelines 提供的 UsePythonVersion
任務來指定 Python 的版本。
steps
:步驟定義了構建和測試過程中的每個動作。這裡的 UsePythonVersion
是一個專門的任務,用來在虛擬機中設定特定的 Python 版本。task: UsePythonVersion@0
:這是 Azure Pipelines 預設的任務,用來下載並安裝指定版本的 Python。@0
代表這個任務的版本號。versionSpec: '$(python.version)'
:引用之前 matrix
策略中定義的 Python 版本變數。這樣可以確保每次工作流運行時,會根據不同的 Python 版本進行切換。displayName: 'Use Python $(python.version)'
:顯示名稱,用來在 Azure Pipelines 界面上顯示當前使用的 Python 版本。5. 安裝依賴項 (steps
)
這個步驟使用 pip
來安裝應用程式的依賴項。
script
:定義要在虛擬機上執行的命令行指令。這裡的指令包括兩部分:
python -m pip install --upgrade pip
:使用 Python 更新 pip(Python 的套件管理工具),以確保使用最新版本。pip install -r requirements.txt
:從 requirements.txt
文件中安裝所有的應用程式依賴項。這個文件通常會列出應用程式所需的所有第三方庫和其版本。displayName: 'Install dependencies'
:這個步驟的顯示名稱,方便在 Azure Pipelines 介面中識別。6. 執行測試 (steps
)
這個步驟使用 pytest
測試框架來運行單元測試。
pip install pytest pytest-azurepipelines
:這行命令安裝 pytest
測試框架以及 pytest-azurepipelines
插件,後者能讓 pytest
測試結果整合到 Azure Pipelines 中。pytest
:運行 pytest
來執行單元測試,確保應用程式的功能符合預期。displayName: 'pytest'
:顯示名稱,讓我們清楚地看到這一步是測試步驟。配置完成後,點擊 Run 來觸發構建流程。Azure Pipelines 將會開始下載依賴、執行測試並構建應用程式。您可以在 Pipelines 頁面查看構建過程的詳細日誌和結果。
持續整合 (CI) 是 DevOps 的基石,可以說是無處不在,它讓開發團隊可以高效、可靠地交付軟體。通過 Azure DevOps Pipelines,我們可以輕鬆設置自動化構建和測試,提升開發效率並保證應用的穩定性。隨著專案的發展,我們可以進一步整合自動化佈署流程,實現持續交付 (CD)。明天,我們將進一步探討 持續交付 (CD) 的實踐與應用~